home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / pcd2_126 / pcd2_126.lzh / PCD2.HAS < prev    next >
Text File  |  1997-06-14  |  17KB  |  822 lines

  1. *************************************************
  2. * 作るつもりはなかったけど
  3. * 電脳倶楽部CDに載ったので続編
  4. * PCD(通).x
  5. * 著作権は可能な限り放棄します
  6. * 改造等は、貴方の良心に従って下さい
  7. * 実行形式・ソース共、利用に制限はありませんが
  8. * 無保証であることだけは保証します
  9. *                 by Fa.Tom 1996
  10. *************************************************
  11.  
  12. *------------------------------
  13. * インクルード&外部参照
  14. *------------------------------
  15.     .include    doscall.mac
  16.     .include    iocscall.mac
  17.     .include    const.h
  18.     .xref    Make_Table
  19.     .xref    GetFHdl
  20.     .xref    ChkPCD
  21.     .xref    GetFHdl_Break
  22.     .xref    YCC2XHI_S,YCC2XHI_X
  23.     .xref    PCD_MAIN
  24.     .xref    Seek_PCD,TC1,TC3
  25.     .xref    BASEDATA_X
  26.     .xref    BASEDATA_S
  27.     .xref    PF_PLAY,GA_INIT,GA_DISP
  28.     .xref    K_Clear
  29.     .xref    MS_INIT
  30.     .xdef    IMAGE_NUM,V_FLAME,FLG_WP
  31.     .xdef    DEC_WORK
  32.     .xdef    SW_S,SW_Q,SW_K,SW_PF,Graph_Ptr,FLG_V,SW_P
  33.     .xdef    SW_LX,SW_LY,VCR2
  34. *------------------------------
  35. * プログラム部
  36. *------------------------------
  37.     .cpu    68000
  38.     .text
  39.     .align    4
  40. *    .dc.b    'PCD2 Fa.Tom-1996'
  41. *------------------------------
  42. * 初期化部(というほどではない)
  43. *------------------------------
  44. ProStart:
  45.     move.l    #-1,V_FLAME
  46.     lea.l    (StackBtm),sp
  47.  
  48.     lea.l    (16,a0),a0
  49.     sub.l    a0,a1
  50.     pea    (a1)
  51.     pea    (a0)
  52.     DOS    _SETBLOCK
  53.     addq.l    #8,sp
  54.  
  55.     lea.l    (a0,$b4),a0        * 実行ファイル名は変更を前提としております
  56.     move.l    a0,(ExecFN)        * PCD(通).xのまま使うバカはいないでしょうが
  57.     tst.b    (a2)+
  58.     beq    NoCMD
  59.     bsr    ChkCMD            * コマンドラインの解析ルーチンへ
  60.  
  61.     lea.l    (Print_Job),a6        * -Qによってメッセージ出力ルーチンを
  62.     tst.b    (SW_Q)            * 選択
  63.     beq    @f
  64.     lea.l    (NoPrint_Job),a6    * 中身は'rts'だけ
  65. @@:
  66.     suba.l    a1,a1
  67.     IOCS    _B_SUPER
  68.     move.l    d0,a1
  69.     move.w    ($e82600),(VCR2)
  70.     IOCS    _B_SUPER
  71.  
  72.     move.l    (ExecFN),a1        * やっとファーストメッセージの表示
  73.     jsr    (a6)
  74.     lea.l    (title_txt),a1
  75.     jsr    (a6)
  76.  
  77.     tst.b    (SW_H)
  78.     beq    @f
  79.     move.l    (ExecFN),a1
  80.     jsr    (a6)
  81.     lea.l    (Help_txt),a1
  82.     jsr    (a6)
  83.     bra    Pro_Exit
  84.  
  85. @@:
  86.     IOCS    _MS_INIT
  87.  
  88.     tst.b    (SW_FN)            * ファイル指定はあるか?
  89.     bne    @f
  90.     lea.l    (NoFile_Txt),a1
  91.     jsr    (a6)
  92.     st    (SW_E)            * ファイル指定の有無をコマンドラインエラーに反映
  93. @@:
  94.     tst.b    (SW_BE)
  95.     beq    @f
  96.     lea.l    (BrightErr_Txt),a1
  97.     jsr    (a6)
  98. @@:
  99.     tst.b    (SW_G)
  100.     bne    @f
  101.  
  102.     bsr    GA_INIT        *TS-6BGAとAGIOCSのチェック及び初期化 [pcd_ga.has]
  103.     move.l    d0,V_FLAME
  104.     tst.l    d0
  105.     bmi    @f
  106.     clr.b    (SW_S)
  107.     bra    1f
  108.  
  109. @@:
  110.     tst.b    (SW_F)            * GVRAMが使用されているかチェック
  111.     bne    @f            * -Fが影響する
  112.     moveq.l    #0,d1
  113.     moveq.l    #-1,d2
  114.     IOCS    _TGUSEMD
  115.     cmpi.w    #1,d0            * システムで使用中か?
  116.     bne    @f
  117.     lea.l    (GVRAM_SYSTEM_USE_txt),a1
  118.     jsr    (a6)
  119.     st    (SW_E)
  120.     bra    1f
  121. @@:
  122.     cmpi.w    #2,d0            * アプリケーションで使用中か?
  123.     bne    1f
  124.     lea.l    (GVRAM_APRI_USE_txt),a1
  125.     jsr    (a6)
  126.     st    (SW_E)
  127. 1:
  128.  
  129.     move.w    #-1,-(sp)    * 
  130.     move.w    #$e,-(sp)    * 現在のファンクションモードを検出
  131.     DOS    _CONCTRL    * 
  132.     addq.l    #4,sp        * 
  133.     move.w    d0,(FuncMODE)
  134.  
  135.     moveq.l    #-1,d0        * コマンドラインエラーが発覚していたら終了
  136.     tst.b    (SW_E)
  137.     bne    Pro_Exit2
  138.  
  139.     tst.l    V_FLAME
  140.     beq    @f
  141.  
  142.     tst.b    (SW_Q)
  143.     bne    @f
  144.  
  145.     move.l    #-1,d1
  146.     IOCS    _B_LOCATE
  147.     move.l    d0,d7
  148.  
  149.     move.w    #$0003,-(a7)    * 
  150.     move.w    #$000e,-(a7)    * ファンクション表示を消す
  151.     DOS    _CONCTRL    * 
  152.     addq.l    #4,a7        * 
  153.  
  154.     move.w    d7,d2
  155.     swap    d7
  156.     move.w    d7,d1
  157.     IOCS    _B_LOCATE
  158. @@:
  159.  
  160.     lea.l    (Target_File),a0
  161.     bsr    GetFHdl        * ファイルネームをオープン        [wild.has]
  162.     tst.l    d0
  163.     bpl    9f
  164. EXT_PLUS:            * "*"という指定に対応
  165.     tst.b    (a0)+
  166.     bne    EXT_PLUS
  167.     cmpi.b    #'.',(-2,a0)    * "filename."という指定に対応
  168.     bne    @f
  169.     subq.l    #1,a0
  170. @@:    move.b    #'.',(-1,a0)
  171.     move.b    #'P',(a0)+
  172.     move.b    #'C',(a0)+
  173.     move.b    #'D',(a0)+
  174.     clr.b    (a0)
  175.     lea.l    (Target_File),a0
  176.     bsr    GetFHdl        * ファイルネーム+[.PCD]をオープン        [wild.has]
  177.     tst.l    d0
  178.     bmi    NotFoundFile_err
  179.     st    (FLG_EXT)
  180. 9:
  181.     move.w    d0,FHdl
  182.  
  183.     move.w    (DEF_Y),d0    * 明るさ指定
  184.     bsr    Make_Table    * フォトYCCデコード用のテーブルを作る    [pcddec.has]
  185.  
  186.     tst.b    (SW_A)
  187.     bne    Load_Memory
  188.  
  189.     bsr    MS_INIT        *マウス関連初期化
  190. 4:    move.w    FHdl,d0
  191.     bsr    PF_PLAY        *Portfolio再生            [pcd_pf.has]
  192.     tst.l    d0
  193.     beq    5f        *再生出来た
  194.     bmi    3f        *処理の中断が指示された
  195.     move.w    FHdl,d0
  196.     bsr    PCD_MAIN    * 表示担当のモジュールへ    [pcd_main.has]
  197.     bsr    K_Clear
  198. 5:    tst.l    d0
  199.     bgt    2f        * 表示出来なかった
  200.     bmi    3f        * 処理の中断が指示された
  201. 1:    st    (FLG_V)        * 一枚でも表示出来たらフラグを立てる
  202.  
  203. 2:    move.w    FHdl,d0
  204.     bsr    GetFHdl        * 次のファイルを得る        [wild.has]
  205.     tst.l    d0
  206.     bmi    Files_End
  207.     move.w    d0,FHdl
  208.     bra    4b
  209.  
  210. 3:
  211.     lea.l    (LocateErr_txt),a1
  212.     cmpi.w    #-2,d0
  213.     beq    @f
  214.     lea.l    (MemoryErr_txt),a1
  215.     cmpi.w    #-3,d0
  216.     beq    @f
  217.     lea.l    (ESC_key_txt),a1
  218.     cmpi.w    #-4,d0
  219.     beq    @f
  220.     lea.l    (File_Break_txt),a1
  221.     cmpi.w    #-5,d0
  222.     beq    @f
  223.     lea.l    (Playlist_NOread_txt),a1
  224.     cmpi.w    #-6,d0
  225.     beq    @f
  226.     lea.l    (NotFile_txt),a1
  227. @@:
  228.     jsr    (a6)
  229.     st    (FLG_V)
  230.     move.w    FHdl,d0
  231.     bsr    GetFHdl_Break    * 元PATHへ戻す            [wild.has]
  232.     lea.l    (Break_txt),a1
  233.     jsr    (a6)
  234. Files_End:
  235.     tst.b    (FLG_V)
  236.     bne    1f
  237.     tst.b    (FLG_EXT)
  238.     beq    EXT_PLUS    * "*"という指定だと、*.PCDを見落とすので戻る
  239.     lea.l    (PCD_NotFound_txt),a1
  240.     jsr    (a6)
  241. 1:
  242.     suba.l    a1,a1
  243.     IOCS    _B_SUPER
  244.     move.l    d0,a1
  245.  
  246.     move.w    (VCR2),($E82600)
  247.  
  248. 2:    tst.l    V_FLAME
  249.     beq    @f
  250.  
  251.     tst.b    (SW_Q)
  252.     bne    @f
  253.  
  254.     move.l    #-1,d1
  255.     IOCS    _B_LOCATE
  256.     move.l    d0,d7
  257.  
  258.     move.w    (FuncMODE),-(sp)
  259.     move.w    #$000e,-(a7)    * システムラインを元のモードに戻す
  260.     DOS    _CONCTRL    * 
  261.     addq.l    #4,a7        * 
  262.  
  263.     move.w    d7,d2
  264.     swap    d7
  265.     move.w    d7,d1
  266.     IOCS    _B_LOCATE
  267.  
  268. @@:
  269.  
  270.     tst.b    (SW_S)
  271.     beq    @f
  272.     tst.b    (SW_Q)
  273.     bne    @f
  274.     moveq.l    #-1,d1
  275.     IOCS    _SKEY_MOD
  276.     move.w    (TC1),($e82202)
  277.     move.w    (TC3),($e82206)
  278. @@:    IOCS    _B_SUPER
  279.     IOCS    _OS_CURON
  280. *------------------------------
  281. * 正常終了
  282. *------------------------------
  283. Pro_Exit:
  284.     tst.l    V_FLAME
  285.     bne    @f
  286.     moveq.l    #0,d0
  287.     bsr    GA_DISP
  288. @@:    bsr    K_Clear
  289.     DOS    _EXIT
  290.  
  291. *------------------------------
  292. * 異常終了
  293. *------------------------------
  294. Pro_Exit2:
  295.     move.w    d0,-(sp)
  296.  
  297.     tst.l    V_FLAME
  298.     bne    @f
  299.     moveq.l    #0,d0
  300.     bsr    GA_DISP
  301.     bra    1f
  302.  
  303. @@:    move.l    #-1,d1
  304.     IOCS    _B_LOCATE
  305.     move.l    d0,d7
  306.  
  307.     move.w    (FuncMODE),-(sp)
  308.     move.w    #$000e,-(a7)    * システムラインを元のモードに戻す
  309.     DOS    _CONCTRL    * 
  310.     addq.l    #4,a7        * 
  311.  
  312.     cmpi.w    #3,FuncMODE
  313.     beq    @f
  314.     cmpi.w    #31,d7
  315.     bcs    @f
  316.     move.w    #30,d7
  317.  
  318. @@:    move.w    d7,d2
  319.     swap    d7
  320.     move.w    d7,d1
  321.     IOCS    _B_LOCATE
  322.  
  323. 1:    bsr    K_Clear
  324.     IOCS    _OS_CURON
  325.  
  326.     DOS    _EXIT2
  327. *------------------------------
  328. * メモリに展開
  329. *------------------------------
  330. Load_Memory:
  331.     move.w    FHdl,d0
  332.     bsr    ChkPCD        * ファイルフォーマットを調査        [chkpcd.has]
  333.     tst.w    d0
  334.     bmi    Pro_Exit2    * d0.w<0の時、イメージパックデータではない
  335.  
  336.     move.w    (IMAGE_NUM),d1    * 指定データが存在するかチェック
  337.     btst.l    d1,d0        * フォトCDカタログで保証されているのは1/16BASEのみ
  338.     beq    LM_exit3
  339.  
  340.     move.w    FHdl,d0
  341.     bsr    Seek_PCD    * 画像データ位置までSEEK        [chkpcd.has]
  342.  
  343.     lea.l    (DEC_WORK),a1
  344.     add.w    d1,d1
  345.  
  346.     clr.l    -(sp)
  347.     DOS    _SUPER
  348.     move.l    d0,(sp)
  349.  
  350.     tst.b    (SW_S)
  351.     bne    Square_Mode
  352.  
  353.     lea.l    (BASEDATA_X),a0
  354.     add.w    (a0,d1.w),a0
  355.  
  356.     move.l    (a0)+,(a1)+
  357.     move.l    (a0)+,(a1)+
  358.     move.l    (a0)+,(a1)+
  359.     move.w    (-8,a1),d1
  360.     addq.l    #1,d1
  361.     add.w    d1,d1    1/3
  362.     add.w    d1,d1    2/3
  363.     move.w    (SW_W),d0
  364.     bne    @f
  365.     move.w    IMAGE_NUM,d0
  366.     add.w    d0,d0
  367.     move.w    (1f,pc,d0.w),d0
  368. @@:    cmp.w    d1,d0
  369.     bmi    LM_exit3    * 展開先に充分な幅がない
  370.     move.w    d0,(a1)+
  371.     add.w    d0,d0
  372.     move.w    d0,(a1)+
  373.     lea.l    (DEC_WORK),a1
  374.     move.l    (Graph_Ptr),a0
  375.     move.w    (FHdl),d0
  376.     bsr    YCC2XHI_X    * 画像を展開する        [pcddec.has]
  377.     bra    LM_1
  378.     .align    4
  379. 1:    .dc.w    128*2,256*2,512*2    * ,1024*2,2048*2
  380. 2:    .dc.w    192*2,384*2,768*2    * ,1536*2,3072*2(そもそもメモリが足りない)
  381.  
  382. Square_Mode:
  383.     lea.l    (BASEDATA_S),a0
  384.     add.w    (a0,d1.w),a0
  385.  
  386.     move.l    (a0)+,(a1)+
  387.     move.l    (a0)+,(a1)+
  388.     move.l    (a0)+,(a1)+
  389.     move.w    (SW_W),d0
  390.     bne    @f
  391.     move.w    IMAGE_NUM,d0
  392.     add.w    d0,d0
  393.     move.w    (2b,pc,d0.w),d0
  394. @@:    cmp.w    (-2,a1),d0
  395.     ble    LM_exit3    * 展開先に充分な幅がない
  396.     move.w    d0,(a1)+
  397.     add.w    d0,d0
  398.     move.w    d0,(a1)+
  399.     lea.l    (DEC_WORK),a1
  400.     move.l    (Graph_Ptr),a0
  401.     move.w    (FHdl),d0
  402.     bsr    YCC2XHI_S    * 画像を展開する        [pcddec.has]
  403. LM_1:    tst.l    d0
  404.     bmi    LM_exit3
  405.     move.w    (FHdl),d0
  406.     bsr    GetFHdl_Break    * パスを元に戻す            [wild.has]
  407.     moveq.l    #0,d0
  408.     DOS    _SUPER
  409.     addq.l    #4,sp
  410.     bra    Pro_Exit
  411.     .align    4
  412.  
  413. LM_exit3:
  414.     move.w    (FHdl),d0
  415.     bsr    GetFHdl_Break    * パスを元に戻す            [wild.has]
  416.     DOS    _SUPER
  417.     addq.l    #4,sp
  418.     moveq.l    #-1,d0
  419.     bra    Pro_Exit2
  420.  
  421. *------------------------------
  422. * メッセージ表示(SW_Qで影響)
  423. *------------------------------
  424. Print_Job:
  425.     IOCS    _B_PRINT
  426. NoPrint_Job:
  427.     rts
  428.  
  429. *------------------------------
  430. * 指定ファイルはない
  431. *------------------------------
  432. NotFoundFile_err:
  433.     lea.l    (NoFFile_Txt),a1
  434.     jsr    (a6)
  435.     bra    Pro_Exit2
  436.  
  437. *------------------------------
  438. * コマンドライン無し
  439. *------------------------------
  440. NoCMD:
  441.     move.l    (ExecFN),-(sp)
  442.     DOS    _PRINT
  443.     pea    (title_txt)
  444.     DOS    _PRINT
  445.     pea    (Help_txt)
  446.     DOS    _PRINT
  447.     pea    (NoFile_Txt)
  448.     DOS    _PRINT
  449.     lea.l    (16,sp),sp
  450.     bra    Pro_Exit2
  451.  
  452. *------------------------------
  453. * コマンドライン解釈部(頭がウニウニ)
  454. *------------------------------
  455. ChkCMD:
  456.     move.b    (a2)+,d0
  457.     beq    ChkCMD_Exit
  458.     cmpi.b    #SPACE,d0
  459.     beq    ChkCMD
  460.     cmpi.b    #TAB,d0        * でも僕はタブコードでコマンドラインを区切ったことは
  461.     beq    ChkCMD        * ありません(除く:makefile)
  462.     cmpi.b    #'-',d0        * '-'で始まるファイル名は作れますが
  463.     beq    ChkCMD_SW    * 作らないように(command.xの内部コマンドが対応出来ない)
  464.     cmpi.b    #'/',d0        * '/'でパスを区切っている人は、
  465.     beq    ChkCMD_SW    * 相対指定するか、ドライブ名をつけましょう
  466.  
  467.     st    (SW_FN)        * ファイルネーム取り込み処理
  468.     lea.l    (Target_File),a0
  469. @@:    move.b    d0,(a0)+
  470.     move.b    (a2)+,d0
  471.     beq    ChkCMD_FCopy_Exit
  472.     cmpi.b    #SPACE,d0
  473.     beq    ChkCMD_FCopy_Break
  474.     cmpi.b    #TAB,d0
  475.     beq    ChkCMD_FCopy_Break
  476.     bra    @b
  477. ChkCMD_FCopy_Break:
  478.     clr.b    (a0)
  479.     bra    ChkCMD
  480. ChkCMD_FCopy_Exit:
  481.     clr.b    (a0)
  482.     bra    ChkCMD_Exit
  483.  
  484. ChkCMD_Exit2:            * コマンドラインエラーが発見された時
  485.     st    (SW_E)        * '-'で終わっていた時とか
  486.  
  487. ChkCMD_Exit:
  488.     rts            * 初期化部に戻る
  489.  
  490. ChkCMD_Continue:
  491.     st    (SW_E)        * コマンドラインエラーが発見されたけど
  492.     bra    ChkCMD        * コマンドラインが続いた場合(-Q指定を探す)
  493.  
  494. ChkCMD_SW:
  495.     clr.w    d0
  496.     move.b    (a2)+,d0
  497.     beq    ChkCMD_Exit2
  498.     cmpi.b    #'?',d0
  499.     beq    ChkCMD_Help
  500.     cmpi.b    #$40,d0
  501.     bmi    ChkCMD_SW_01234    * かなり適当
  502.  
  503.     andi.b    #$5f,d0
  504.  
  505.     cmpi.b    #'A',d0
  506.     beq    ChkCMD_Address    * 展開アドレス指定
  507.  
  508.     cmpi.b    #'B',d0
  509.     beq    ChkCMD_Bright    * 明るさ調整
  510.  
  511.     cmpi.b    #'F',d0
  512.     beq    ChkCMD_Fource    * TGUSEMDの値を無視
  513.  
  514.     cmpi.b    #'Q',d0
  515.     beq    ChkCMD_Quiet    * 沈黙モード(一切のテキスト出力を行わない)
  516.  
  517.     cmpi.b    #'S',d0
  518.     beq    ChkCMD_Square    * 正方形モード設定
  519.  
  520.     cmpi.b    #'G',d0
  521.     beq    ChkCMD_GVRAM    * G-RAMへ表示
  522.  
  523.     cmpi.b    #'P',d0
  524.     beq    ChkCMD_PLread    * PLAYLIST.PCDを強制読み込み
  525.  
  526.     cmpi.b    #'L',d0
  527.     beq    ChkCMD_Locate    * 展開座標指定(アドレスモード時不可)
  528.  
  529.     cmpi.b    #'W',d0        * アドレスモード時に必ず指定すること
  530.     beq    ChkCMD_Width    * 展開バッファの横バイト数(十進)デフォルトは展開Xサイズ*2
  531.  
  532.     cmpi.b    #'K',d0
  533.     beq    ChkCMD_Keysns    * キー入力対応
  534.  
  535.     cmpi.b    #'H',d0
  536.     beq    ChkCMD_Help    * ヘルプメッセージ出力
  537.  
  538.     rts
  539. *------------------------------
  540. * 展開アドレス指定モード
  541. *------------------------------
  542. ChkCMD_Address:
  543.     st    (SW_A)
  544.     st    (SW_Q)
  545.     bsr    INTget
  546.     tst.l    d0
  547.     bmi    ChkCMD_Continue    * 読み取りエラー
  548.     btst.l    #0,d0
  549.     bne    ChkCMD_Continue    * 奇数アドレス指定エラー
  550.     move.l    d0,(Graph_Ptr)
  551.     bra    ChkCMD
  552.  
  553. *------------------------------
  554. * アドレスモード時の1ラインバイト数
  555. *------------------------------
  556. ChkCMD_Width:
  557.     bsr    INTget
  558.     tst.l    d0
  559.     bmi    ChkCMD_Continue
  560.     btst.l    #0,d0
  561.     bne    ChkCMD_Continue    * 奇数バイト指定エラー
  562.     move.w    d0,SW_W
  563. @@:    bra    ChkCMD
  564.  
  565. *------------------------------
  566. * 展開座標指定
  567. *------------------------------
  568. ChkCMD_Locate:
  569.     bsr    INTget
  570.     tst.l    d0
  571.     bmi    ChkCMD_Continue
  572.     move.w    d0,SW_LX
  573.     move.b    (a2)+,d0
  574.     beq    ChkCMD_Exit2
  575.     cmpi.b    #',',d0
  576.     bne    @f
  577.     bsr    INTget
  578.     tst.l    d0
  579.     bmi    ChkCMD_Continue
  580.     move.w    d0,SW_LY
  581. @@:    bra    ChkCMD
  582.  
  583. *------------------------------
  584. * 沈黙モード
  585. *------------------------------
  586. ChkCMD_Quiet:
  587.     st    (SW_Q)
  588.     bra    ChkCMD
  589.  
  590. *------------------------------
  591. * 説明モード?
  592. *------------------------------
  593. ChkCMD_Help:
  594.     st    (SW_H)
  595.     bra    ChkCMD
  596.  
  597. *------------------------------
  598. * キーセンスモード
  599. *------------------------------
  600. ChkCMD_Keysns:
  601.     st    (SW_K)
  602.     bra    ChkCMD
  603.  
  604. *------------------------------
  605. * 正方形モード
  606. *------------------------------
  607. ChkCMD_Square:
  608.     st    (SW_S)
  609.  
  610. *------------------------------
  611. * TS-6BGA未使用モード
  612. *------------------------------
  613. ChkCMD_GVRAM:
  614.     st    (SW_G)
  615.     bra    ChkCMD
  616.  
  617. *------------------------------
  618. * PALYLIST_PCD強制読み込み
  619. *------------------------------
  620. ChkCMD_PLread:
  621.     st    (SW_P)
  622.     bra    ChkCMD
  623.  
  624. *------------------------------
  625. * 強制GVRAM使用モード
  626. *------------------------------
  627. ChkCMD_Fource:
  628.     st    (SW_F)
  629.     bra    ChkCMD
  630.  
  631. *------------------------------
  632. * 明るさ調整数値読取(0-200%)
  633. *------------------------------
  634. ChkCMD_Bright:
  635.     bsr    INTget
  636.     tst.l    d0
  637.     bmi    @f
  638.     cmp.w    #200,d0
  639.     bgt    @f
  640.     move.w    d0,(DEF_Y)
  641.     bra    ChkCMD
  642. @@:
  643.     st    (SW_BE)
  644.     bra    ChkCMD_Continue
  645. *------------------------------
  646. * 画像指定
  647. *------------------------------
  648. ChkCMD_SW_01234:        * -0,-1,-2(,-3,-4)
  649.     sub.w    #'0',d0
  650.     bmi    ChkCMD_Exit2
  651.     cmpi.w    #2,d0
  652. *    cmpi.w    #4,d0        * 本当は4BASE,16BASEに対応したかった(ハフマン圧縮らしい)
  653.     bgt    ChkCMD_Exit2    * コダックのシステムでは1024BASEまでではサポート出来るらしい・・・
  654.     move.w    d0,IMAGE_NUM
  655.     bra    ChkCMD
  656.  
  657. *------------------------------
  658. * 数字読み取り
  659. *------------------------------
  660. INTget:
  661.     move.l    d1,-(sp)
  662.     moveq.l    #0,d0
  663.     moveq.l    #-1,d1
  664.     move.w    #0,d1
  665.     move.b    (a2)+,d0
  666.     beq    Str2Bin_e        * 読み取るものがなかった。
  667.  
  668.     cmpi.b    #SPACE,d0
  669.     beq    Str2Bin_e2
  670.     cmpi.b    #TAB,d0
  671.     beq    Str2Bin_e2
  672.     cmpi.b    #'$',d0
  673.     beq    Hex2Bin
  674.     cmpi.b    #'0',d0
  675.     beq    Hex?
  676. NoHex:
  677.     subi.b    #'0',d0
  678.     bmi    Str2Bin_e
  679.     cmpi.b    #9,d0
  680.     bgt    Str2Bin_e
  681.     mulu.w    #10,d1
  682.     add.l    d0,d1
  683.  
  684.     move.b    (a2)+,d0
  685.     bne    NoHex
  686. Str2Bin_e:
  687.     subq.l    #1,a2
  688. Str2Bin_e2:
  689.     move.l    d1,d0
  690.     movem.l    (sp)+,d1
  691.     rts
  692. Hex?:
  693.     moveq.l    #0,d1
  694.     move.b    (a2)+,d0
  695.     beq    Str2Bin_e
  696.     cmpi.b    #'x',d0
  697.     beq    Hex2Bin_loop
  698.     cmpi.b    #'X',d0
  699.     beq    Hex2Bin_loop
  700.     move.b    #'0',d0
  701.     subq.l    #1,a2
  702.     bra    NoHex
  703. Hex2Bin:
  704.     moveq.l    #0,d1
  705. Hex2Bin_loop:
  706.     move.b    (a2)+,d0
  707.     beq    Str2Bin_e
  708.     cmpi.w    #'0',d0
  709.     bmi    Str2Bin_e
  710.     cmpi.w    #'9',d0
  711.     ble    Hex2Bin_Suji
  712.     cmpi.w    #'A',d0
  713.     bmi    Str2Bin_e
  714.     cmpi.w    #'f',d0
  715.     bgt    Str2Bin_e
  716.     cmpi.w    #'F',d0
  717.     ble    Hex2Bin_Hex
  718.     cmpi.w    #'a',d0
  719.     bmi    Str2Bin_e
  720. Hex2Bin_Hex:
  721.     andi.b    #$5f,d0
  722.     sub.w    #'A'-10,d0
  723. @@:    lsl.l    #4,d1
  724.     add.w    d0,d1
  725.     bra    Hex2Bin_loop
  726. Hex2Bin_Suji:
  727.     sub.w    #'0',d0
  728.     bra    @b
  729. *------------------------------
  730. * データセクション
  731. *------------------------------
  732.     .data
  733. title_txt:
  734.     .dc.b    ' ver1.26    by Fa.Tom,まる丸 1996/1997',$d,$a
  735.     .dc.b    ' コダックPhotoCDフォーマットの画像を表示します。',$d,$a,0
  736. Help_txt:
  737.     .dc.b    '  -0           192*128を展開(128*128,-S時192*128)',$d,$a
  738.     .dc.b    '  -1           384*256を展開(256*256,-S時384*256)',$d,$a
  739.     .dc.b    '  -2           768*512を展開(512*512,-S時768*512)',$d,$a
  740.     .dc.b    '               デフォルト画像は768*512(BASEサイズ)',$d,$a
  741.     .dc.b    '  -S           正方形モード',$d,$a
  742.     .dc.b    '  -Axxxxxx     アドレスモード(メインメモリに展開・-Wも同時に指定して下さい)',$d,$a
  743.     .dc.b    '  -Wnnn        1ラインのバイト数(アドレスモード時に影響)',$d,$a
  744.     .dc.b    '  -Bnnn        明るさ調整(0-200%)',$d,$a
  745.     .dc.b    '  -K           キー待ち',$d,$a
  746.     .dc.b    '  -Lx,y        画像展開位置',$d,$a
  747.     .dc.b    '  -G           TS-6BGAを使用しない',$d,$a
  748.     .dc.b    '  -P           PLAYLIST.PCD強制読み込み',$d,$a
  749.     .dc.b    '  -F           GVRAM強制使用',$d,$a
  750.     .dc.b    '  -Q           テキスト表示抑制(TVRAMを一切書き替えません)',$d,$a
  751.     .dc.b    '  -H,-?        このヘルプメッセージを表示します',$d,$a
  752.     .dc.b    '  filenameにはワイルドカードが使用出来ます',$d,$a
  753.     .dc.b    '  数値指定部を 0x,$ で始めると16進表記が出来ます',$d,$a,0
  754. NoFile_Txt:    .dc.b    'コマンドラインにファイルネームが必要です',$d,$a,0
  755. GVRAM_SYSTEM_USE_txt:
  756.     .dc.b    'GVRAMはシステムで使用中です',$d,$a,0
  757. GVRAM_APRI_USE_txt:
  758.     .dc.b    'GVRAMはアプリケーションが使用中です',$d,$a,0
  759. NoFFile_Txt:
  760.     .dc.b    '指定ファイルがありません',$d,$a,0
  761. Break_txt:
  762.     .dc.b    '処理を中断します',$d,$a,0
  763. PCD_NotFound_txt:
  764.     .dc.b    '指定ファイルはPhotoCDフォーマットとして認識出来なかったか',$d,$a
  765.     .dc.b    '未対応のフォーマットでした。',$d,$a,0
  766. BrightErr_Txt:    .dc.b    '-Bの有効範囲は0~200です',$d,$a,0
  767. LocateErr_txt:
  768.     .dc.b    '-Lオプションの指定値が範囲外です',$d,$a,0
  769. NotFile_txt:
  770.     .dc.b    'ファイルアクセスに失敗しました',$d,$a,0
  771. MemoryErr_txt:
  772.     .dc.b    '画像展開に必要なメモリが確保出来ませんでした',$d,$a,0
  773. ESC_key_txt:
  774.     .dc.b    'ESCキーが押されました。',$d,$a,0
  775. File_Break_txt:
  776.     .dc.b    'データが最後まで無いようです。',$d,$a,0
  777. Playlist_NOread_txt:
  778.     .dc.b    'PLAYLIST.PCDの読み込みに失敗しました。',$d,$a,0
  779.     .align    4
  780. Graph_Ptr:    .dc.l    $c00000
  781. SW_LX:        .dc.w    0
  782. SW_LY:        .dc.w    0
  783. DEF_Y:        .dc.w    100
  784. IMAGE_NUM:    .dc.w    2
  785. SW_W:        .dc.w    0
  786. SW_A:        .dc.b    0
  787. SW_E:        .dc.b    0
  788. SW_F:        .dc.b    0
  789. SW_FN:        .dc.b    0
  790. SW_G:        .dc.b    0
  791. SW_H:        .dc.b    0
  792. SW_K:        .dc.b    0
  793. SW_N:        .dc.b    0
  794. SW_Q:        .dc.b    0
  795. SW_S:        .dc.b    0
  796. SW_BE:        .dc.b    0
  797. SW_PF:        .dc.b    0
  798. SW_P:        .dc.b    0
  799. FLG_V:        .dc.b    0
  800. FLG_EXT:    .dc.b     0
  801. FLG_WP:        .dc.b    0
  802. *------------------------------
  803. * ブロックストレージセクション
  804. *------------------------------
  805.     .bss
  806.     .align    4
  807. DEC_WORK:    .ds.w    8
  808. ExecFN:    .ds.l    1
  809. CurLOC:    .ds.l    1
  810. FHdl:    .ds.w    1
  811. VCR2:    .ds.w    1
  812. FuncMODE:    .ds.w    1
  813. Target_File:    .ds.b    128
  814. V_FLAME:    .ds.l    1
  815. *------------------------------
  816. * スタックセクション
  817. *------------------------------
  818.     .stack
  819.     .ds.l    1000
  820. StackBtm:
  821.     .end    ProStart
  822.